/*
 *Autor: Anderson Campos Cardoso
 *
 *Conteúdo: Arquivo cabeçalho para a classe Sprite
 */
#include <SDL/SDL.h>
#include <SDL_image.h>
#include <iostream>
#include "Video.h"
#include "Relogio.h"

#ifndef _SPRITE_H_
#define _SPRITE_H_

using namespace std;

//variáveis globais externas
extern const int SCREEN_WIDTH;
extern const int SCREEN_HEIGTH;
extern const int TILE_WIDTH;
extern const int TILE_HEIGTH;

/*
 *Minha estrutura de retangulo, com x, y reais e não Sint16 para armazenar a posicao do sprite na janela
 */
typedef struct DEST_Rect {
	float x, y;
	Uint16 w, h;
} DEST_Rect;

class Sprite
{
   protected:

   SDL_Surface *imagem;	//quarda a imagem do sprite
   SDL_Rect *orig;	//armazena o retângulo na imagem de origem
   DEST_Rect *dest;	//armazena o retângulo na janela de destino
   Uint32 quadro;	//quadro do sprite, parametro defasado
   int delta_x,delta_y;	//variação da posição do sprite
   float vx,vy;		//componentes x e y da velocidade do sprite na cena
   Uint32 getQuadro(void);
   Video *video;
   Relogio *relogio;


   public:

   void carregarImagem(string nomeArquivo);
   void setVideo(Video *p_video);
   void setRelogio(Relogio *p_relogio);
   void setQuadro(int valor);
   void incrementaQuadro(void);
   void setOrig(Sint16 _x, Sint16 _y, Uint16 _w, Uint16 _h);
   void setDest(float _x,float _y,Uint16 _w,Uint16 _h);
   void setarSprite(int _x,int _y,int _w,int _h);
   void setDelta_x(int _x);
   void setDelta_y(int _y);
   void setarDeltaXY(int _x,int _y);
   void setVx(float _vx);
   void setVy(float _vy);
   Video *getVideo();
   Relogio *getRelogio();
   float getVx(void);
   float getVy(void);
   void limparSprite(void);
   void blitSprite(void);
   Sprite(void);
   Sprite(string nomeArquivo, Video *_video, Relogio *_relogio,Sint16 orig_x, Sint16 orig_y, Uint16 orig_w, Uint16 orig_h, float dest_x, float dest_y, Uint16 dest_w, Uint16 dest_h);
   ~Sprite(void);

};

#endif
